package leetcode.N1001_N1100;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 歪大哥😁
 * @date 2020-08-07.
 * 给定由若干 0 和 1 组成的数组 A。我们定义 N_i：从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数（从最高有效位到最低有效位）。
 *
 * 返回布尔值列表 answer，只有当 N_i 可以被 5 整除时，答案 answer[i] 为 true，否则为 false。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：[0,1,1]
 * 输出：[true,false,false]
 * 解释：
 * 输入数字为 0, 01, 011；也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除，因此 answer[0] 为真。
 * 示例 2：
 *
 * 输入：[1,1,1]
 * 输出：[false,false,false]
 * 示例 3：
 *
 * 输入：[0,1,1,1,1,1]
 * 输出：[true,false,false,false,true,false]
 * 示例 4：
 *
 * 输入：[1,1,1,0,1]
 * 输出：[false,false,false,false,false]
 *  
 *
 * 提示：
 *
 * 1 <= A.length <= 30000
 * A[i] 为 0 或 1
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/binary-prefix-divisible-by-5
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 */
public class N1018 {

    public static void main(String[] args) {


    }

    public List<Boolean> prefixesDivBy5(int[] A) {
        int length;
        if (A == null || (length = A.length) == 0) {
            return new ArrayList<>();
        }
        List<Boolean> result = new ArrayList<>(length);
        int current = 0;
        for (int i : A) {
            int currentSum = (current << 1) + i;
            result.add((current = currentSum % 5) == 0);
        }
        return result;
    }



}
